.Dd April 5, 2007
.Dt CC_MD5 3cc
.Os
.Sh NAME
.Nm CC_MD2_Init
.Nm CC_MD2_Update
.Nm CC_MD2_Final
.Nm CC_MD2
.Pp
.Nm CC_MD4_Init
.Nm CC_MD4_Update
.Nm CC_MD4_Final
.Nm CC_MD4
.Pp
.Nm CC_MD5_Init
.Nm CC_MD5_Update
.Nm CC_MD5_Final
.Nm CC_MD5
.Pp
.Nd MD2, MD4, and MD5 hash functions
.Sh SYNOPSIS
.In CommonCrypto/CommonDigest.h
.Ft extern int
.Fn CC_MD2_Init "CC_MD2_CTX *c"
.Ft extern int
.Fn CC_MD2_Update "CC_MD2_CTX *c" "const void *data" "CC_LONG len"
.Ft extern int
.Fn CC_MD2_Final "unsigned char *md" "CC_MD2_CTX *c"
.Ft extern unsigned char *
.Fn CC_MD2 "const void *data" "CC_LONG len" "unsigned char *md"
.Pp
.Ft extern int
.Fn CC_MD4_Init "CC_MD4_CTX *c"
.Ft extern int
.Fn CC_MD4_Update "CC_MD4_CTX *c" "const void *data" "CC_LONG len"
.Ft extern int
.Fn CC_MD4_Final "unsigned char *md" "CC_MD4_CTX *c"
.Ft extern unsigned char *
.Fn CC_MD4 "const void *data" "CC_LONG len" "unsigned char *md"
.Pp
.Ft extern int
.Fn CC_MD5_Init "CC_MD5_CTX *c"
.Ft extern int
.Fn CC_MD5_Update "CC_MD5_CTX *c" "const void *data" "CC_LONG len"
.Ft extern int
.Fn CC_MD5_Final "unsigned char *md" "CC_MD5_CTX *c"
.Ft extern unsigned char *
.Fn CC_MD5 "const void *data" "CC_LONG len" "unsigned char *md"
.Sh DESCRIPTION
The following functions are used to produce an hash from data:
.Pp
.Fn CC_MD2_Init
initializes a 
.Ft CC_MD2_CTX
structure.
.Pp
.Fn CC_MD2_Update
can be called repeatedly with chunks of the message to
be hashed (len bytes at data).
.Pp
.Fn CC_MD2_Final
places the MD2 message digest in md, which must have space
for 
.Ft CC_MD2_DIGEST_LENGTH
== 16 bytes of output, and erases the 
.Ft CC_MD2_CTX .
.Pp
.Fn CC_MD2
computes the MD2 message digest of the len
bytes at data and places it in md (which must have space for
.Ft CC_MD2_DIGEST_LENGTH
== 16 bytes of output). It returns the md pointer.
.Pp
.Fn CC_MD4_Init , 
.Fn CC_MD4_Update , 
.Fn CC_MD4_Final , 
.Fn CC_MD4 , 
.Fn CC_MD5_Init , 
.Fn CC_MD5_Update , 
.Fn CC_MD5_Final ,
and 
.Fn CC_MD5
are analogous using an 
.Ft CC_MD4_CTX
and 
.Ft CC_MD5_CTX
structure.
.Sh NOTE
MD2, MD4, and MD5 are recommended only for compatibility with existing
applications. In new applications, SHA\-256(or greater) should be
preferred.
.Sh RETURN VALUES
All routines return 1 upon success and NULL upon failure, except for the one-shot routines (
.Fn CC_MD2
, etc.), which return the pointer passed in via the md parameter.
.Sh CONFORMING TO
RFC 1319, RFC 1320, RFC 1321
.Sh SEE ALSO
.Xr CC_crypto 3cc ,
.Xr CC_SHA 3cc ,
.Xr CCHmac 3cc ,
.Xr CCCryptor 3cc
.Sh HISTORY
These functions are available in OS X 10.4 and later.
.Pp
These functions provide similar functionality to the routines found
in OpenSSL 0.9.6 and may use the same implementation.
